python3之多线程、共享变量、死锁问题 | 您所在的位置:网站首页 › python 多线程共享变量 › python3之多线程、共享变量、死锁问题 |
1、环境
-xubuntu、anaconda、pycharm、python3.7 -https://www.cnblogs.com/jokerbj/p/7460260.html -https://www.dabeaz.com/python/UnderstandingGIL.pdf 2、多线程-程序:一堆代码以文本形式存入一个文档 -进程:程序运行的一个状态 -包含地址空间、内存数据线等 -每个进程有自己完全独立的运行环境,多进程共享数据是一个问题 -线程 -一个进程的独立运行片段,一个进程可以有多个线程 -轻量化的进程 -一个进程的多个线程间共享数据和上下文运行环境 -共享互斥问题 -全局解释器锁(GIL) -Python代码的执行是由python虚拟机进行控制 -在主循环中只能有一个控制线程在执行 -Python包 -thread:有问题,不好用,python3改成了_thread -threading:通行的包 -案例:第一个:顺序执行,耗时长; 第二个:多线程,耗时短 第三个:多线程,传参数 ''' 利用time函数,生成两个函数 程序调用 计算总的运行时间 ''' import time def loop1(): #ctime 得到当前时间 print('Start loop1 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(4) print('End loop1 at:',time.ctime()) def loop2(): #ctime 得到当前时间 print('Start loop2 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(2) print('End loop2 at:',time.ctime()) def main(): print("Sarting at:",time.ctime()) loop1() loop2() print("All done at:",time.ctime()) if __name__=='__main__': main() 运行: Sarting at: Sun Mar 31 10:26:00 2019 Start loop1 at: Sun Mar 31 10:26:00 2019 End loop1 at: Sun Mar 31 10:26:04 2019 Start loop2 at: Sun Mar 31 10:26:04 2019 End loop2 at: Sun Mar 31 10:26:06 2019 All done at: Sun Mar 31 10:26:06 2019 ----------------------------------------------------------- ''' 多线程 ''' import time import _thread as thread def loop1(): #ctime 得到当前时间 print('Start loop1 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(4) print('End loop1 at:',time.ctime()) def loop2(): #ctime 得到当前时间 print('Start loop2 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(2) print('End loop2 at:',time.ctime()) #有三个线程,一个主线程(主管),两个工作的人,干的活是loop1、loop2 def main(): print("Sarting at:",time.ctime()) #启动多线程的意思是用多线程去执行某个函数 #启动多线程函数为start_new_thread #参数两个,一个是需要运行的函数名,第二个函数参数作为元组使用 #注意:如果函数只有一个参数,需要参数后有一个括号,若有参数放在括号里 thread.start_new_thread(loop1,()) thread.start_new_thread(loop2,()) print("All done at:",time.ctime()) if __name__=='__main__': main() #死循环,主线程一直等 while True: time.sleep(1) 运行: Sarting at: Sun Mar 31 10:54:45 2019 All done at: Sun Mar 31 10:54:45 2019 Start loop2 at:Start loop1 at: Sun Mar 31 10:54:45 2019Sun Mar 31 10:54:45 2019 End loop2 at: Sun Mar 31 10:54:47 2019 End loop1 at: Sun Mar 31 10:54:49 2019 ----------------------------------------------------------------------------------- ''' 利用time延时函数生成两个函数 利用多线程调用 计算总运行时间 练习带参数的多线程 |
CopyRight 2018-2019 实验室设备网 版权所有 |